home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / GRAPHICS / 3DTUT.ZIP / 3DTUT1.PAS next >
Encoding:
Pascal/Delphi Source File  |  1995-03-16  |  16.3 KB  |  682 lines

  1. Program Euxinus_3DTUTER1;
  2.  
  3. uses crt,graph;
  4.  
  5. type
  6.   SCRCORD = RECORD  { point on screen }
  7.     X : INTEGER;
  8.     Y : INTEGER;
  9.   END;
  10.   POINT = RECORD  { Point in 3d space }
  11.     X : INTEGER;
  12.     Y : INTEGER;
  13.     Z : INTEGER;
  14.   END;
  15.   _3DOBJECT = RECORD
  16.     degreinc : POINT;
  17.     degre : POINT;
  18.     numberofpoints : INTEGER;
  19.     color : BYTE;
  20.     shadedcolor : Array [1..1500] of BYTE;
  21.     orginalcordinates : Array [1..1500] of POINT;
  22.     rotatedcordinates : Array [1..1500] of POINT;
  23.     screencordinates : Array [1..1500] of SCRCORD;
  24.     objpos : POINT;
  25.   end;
  26.  
  27. var obj : _3DOBJECT;
  28.     sina,cosa : Array [0..360] of real;
  29.     page : BYTE;
  30.  
  31. Procedure object2;
  32.  
  33. BEGIN
  34.   obj.numberofpoints:=12;
  35.   obj.degre.x:=0;
  36.   obj.degre.y:=0;
  37.   obj.degre.z:=0;
  38.   obj.degreinc.x:=1;
  39.   obj.degreinc.y:=1;
  40.   obj.degreinc.z:=1;
  41.  
  42.   obj.orginalcordinates[1].x:=0;
  43.   obj.orginalcordinates[1].y:=20;
  44.   obj.orginalcordinates[1].z:=0;
  45.  
  46.   obj.orginalcordinates[2].x:=0;
  47.   obj.orginalcordinates[2].y:=10;
  48.   obj.orginalcordinates[2].z:=18;
  49.  
  50.   obj.orginalcordinates[3].x:=18;
  51.   obj.orginalcordinates[3].y:=10;
  52.   obj.orginalcordinates[3].z:=4;
  53.  
  54.   obj.orginalcordinates[4].x:=10;
  55.   obj.orginalcordinates[4].y:=10;
  56.   obj.orginalcordinates[4].z:=-18;
  57.  
  58.   obj.orginalcordinates[5].x:=-10;
  59.   obj.orginalcordinates[5].y:=10;
  60.   obj.orginalcordinates[5].z:=-18;
  61.  
  62.   obj.orginalcordinates[6].x:=-18;
  63.   obj.orginalcordinates[6].y:=10;
  64.   obj.orginalcordinates[6].z:=4;
  65.  
  66.   obj.orginalcordinates[7].x:=0;
  67.   obj.orginalcordinates[7].y:=-10;
  68.   obj.orginalcordinates[7].z:=18;
  69.  
  70.   obj.orginalcordinates[8].x:=18;
  71.   obj.orginalcordinates[8].y:=-10;
  72.   obj.orginalcordinates[8].z:=4;
  73.  
  74.   obj.orginalcordinates[9].x:=10;
  75.   obj.orginalcordinates[9].y:=-10;
  76.   obj.orginalcordinates[9].z:=-18;
  77.  
  78.   obj.orginalcordinates[10].x:=-10;
  79.   obj.orginalcordinates[10].y:=-10;
  80.   obj.orginalcordinates[10].z:=-18;
  81.  
  82.   obj.orginalcordinates[11].x:=-18;
  83.   obj.orginalcordinates[11].y:=-10;
  84.   obj.orginalcordinates[11].z:=4;
  85.  
  86.   obj.orginalcordinates[12].x:=0;
  87.   obj.orginalcordinates[12].y:=-20;
  88.   obj.orginalcordinates[12].z:=0;
  89. END;
  90.  
  91.  
  92.  
  93.  
  94.  
  95. Procedure object1;
  96.  
  97. BEGIN
  98.   obj.numberofpoints:=6;
  99.   obj.degre.x:=0;
  100.   obj.degre.y:=0;
  101.   obj.degre.z:=0;
  102.   obj.degreinc.x:=1;
  103.   obj.degreinc.y:=1;
  104.   obj.degreinc.z:=1;
  105.  
  106.   obj.orginalcordinates[1].x:=0;
  107.   obj.orginalcordinates[1].y:=30;
  108.   obj.orginalcordinates[1].z:=0;
  109.  
  110.   obj.orginalcordinates[2].x:=-15;
  111.   obj.orginalcordinates[2].y:=0;
  112.   obj.orginalcordinates[2].z:=15;
  113.  
  114.   obj.orginalcordinates[3].x:=15;
  115.   obj.orginalcordinates[3].y:=0;
  116.   obj.orginalcordinates[3].z:=15;
  117.  
  118.   obj.orginalcordinates[4].x:=15;
  119.   obj.orginalcordinates[4].y:=0;
  120.   obj.orginalcordinates[4].z:=-15;
  121.  
  122.   obj.orginalcordinates[5].x:=-15;
  123.   obj.orginalcordinates[5].y:=0;
  124.   obj.orginalcordinates[5].z:=-15;
  125.  
  126.   obj.orginalcordinates[6].x:=0;
  127.   obj.orginalcordinates[6].y:=-30;
  128.   obj.orginalcordinates[6].z:=0;
  129. END;
  130.  
  131.  
  132.  
  133. Procedure ship3;
  134.  
  135. BEGIN
  136.   obj.numberofpoints:=13;
  137.   obj.degre.x:=0;
  138.   obj.degre.y:=0;
  139.   obj.degre.z:=0;
  140.   obj.degreinc.x:=1;
  141.   obj.degreinc.y:=1;
  142.   obj.degreinc.z:=1;
  143.  
  144.   obj.orginalcordinates[1].x:=0;
  145.   obj.orginalcordinates[1].y:=0;
  146.   obj.orginalcordinates[1].z:=40;
  147.  
  148.   obj.orginalcordinates[2].x:=-20;
  149.   obj.orginalcordinates[2].y:=0;
  150.   obj.orginalcordinates[2].z:=-20;
  151.  
  152.   obj.orginalcordinates[3].x:=-14;
  153.   obj.orginalcordinates[3].y:=5;
  154.   obj.orginalcordinates[3].z:=-23;
  155.  
  156.   obj.orginalcordinates[4].x:=-6;
  157.   obj.orginalcordinates[4].y:=7;
  158.   obj.orginalcordinates[4].z:=-25;
  159.  
  160.   obj.orginalcordinates[5].x:=0;
  161.   obj.orginalcordinates[5].y:=9;
  162.   obj.orginalcordinates[5].z:=-26;
  163.  
  164.   obj.orginalcordinates[6].x:=6;
  165.   obj.orginalcordinates[6].y:=7;
  166.   obj.orginalcordinates[6].z:=-25;
  167.  
  168.   obj.orginalcordinates[7].x:=14;
  169.   obj.orginalcordinates[7].y:=5;
  170.   obj.orginalcordinates[7].z:=-23;
  171.  
  172.   obj.orginalcordinates[8].x:=20;
  173.   obj.orginalcordinates[8].y:=0;
  174.   obj.orginalcordinates[8].z:=-20;
  175.  
  176.   obj.orginalcordinates[9].x:=14;
  177.   obj.orginalcordinates[9].y:=-5;
  178.   obj.orginalcordinates[9].z:=-23;
  179.  
  180.   obj.orginalcordinates[10].x:=6;
  181.   obj.orginalcordinates[10].y:=-7;
  182.   obj.orginalcordinates[10].z:=-25;
  183.   obj.orginalcordinates[11].x:=0;
  184.   obj.orginalcordinates[11].y:=-9;
  185.   obj.orginalcordinates[11].z:=-26;
  186.  
  187.   obj.orginalcordinates[12].x:=-6;
  188.   obj.orginalcordinates[12].y:=-7;
  189.   obj.orginalcordinates[12].z:=-25;
  190.  
  191.   obj.orginalcordinates[13].x:=-14;
  192.   obj.orginalcordinates[13].y:=-5;
  193.   obj.orginalcordinates[13].z:=-23;
  194.  
  195. end;
  196.  
  197. Procedure ship2;
  198.  
  199. BEGIN
  200.   obj.numberofpoints:=5;
  201.   obj.degre.x:=0;
  202.   obj.degre.y:=0;
  203.   obj.degre.z:=0;
  204.   obj.degreinc.x:=1;
  205.   obj.degreinc.y:=1;
  206.   obj.degreinc.z:=1;
  207.  
  208.  
  209.   obj.orginalcordinates[1].x:=0;
  210.   obj.orginalcordinates[1].y:=0;
  211.   obj.orginalcordinates[1].z:=60;
  212.  
  213.   obj.orginalcordinates[2].x:=-40;
  214.   obj.orginalcordinates[2].y:=0;
  215.   obj.orginalcordinates[2].z:=-40;
  216.  
  217.   obj.orginalcordinates[3].x:=0;
  218.   obj.orginalcordinates[3].y:=20;
  219.   obj.orginalcordinates[3].z:=-40;
  220.  
  221.   obj.orginalcordinates[4].x:=40;
  222.   obj.orginalcordinates[4].y:=0;
  223.   obj.orginalcordinates[4].z:=-40;
  224.  
  225.   obj.orginalcordinates[5].x:=0;
  226.   obj.orginalcordinates[5].y:=-20;
  227.   obj.orginalcordinates[5].z:=-40;
  228. end;
  229.  
  230.  
  231.  
  232.  
  233. Procedure ship;
  234.  
  235. BEGIN
  236.   obj.numberofpoints:=7;
  237.   obj.degre.x:=0;
  238.   obj.degre.y:=0;
  239.   obj.degre.z:=0;
  240.   obj.degreinc.x:=1;
  241.   obj.degreinc.y:=1;
  242.   obj.degreinc.z:=1;
  243.  
  244.  
  245.   obj.orginalcordinates[1].x:=0;
  246.   obj.orginalcordinates[1].y:=0;
  247.   obj.orginalcordinates[1].z:=60;
  248.  
  249.   obj.orginalcordinates[2].x:=-40;
  250.   obj.orginalcordinates[2].y:=0;
  251.   obj.orginalcordinates[2].z:=-40;
  252.  
  253.   obj.orginalcordinates[3].x:=-20;
  254.   obj.orginalcordinates[3].y:=10;
  255.   obj.orginalcordinates[3].z:=-50;
  256.  
  257.   obj.orginalcordinates[4].x:=20;
  258.   obj.orginalcordinates[4].y:=10;
  259.   obj.orginalcordinates[4].z:=-50;
  260.  
  261.   obj.orginalcordinates[5].x:=40;
  262.   obj.orginalcordinates[5].y:=0;
  263.   obj.orginalcordinates[5].z:=-40;
  264.  
  265.   obj.orginalcordinates[6].x:=20;
  266.   obj.orginalcordinates[6].y:=-10;
  267.   obj.orginalcordinates[6].z:=-50;
  268.  
  269.   obj.orginalcordinates[7].x:=-20;
  270.   obj.orginalcordinates[7].y:=-10;
  271.   obj.orginalcordinates[7].z:=-50;
  272. end;
  273.  
  274.  
  275. Procedure object3;
  276.  
  277. BEGIN
  278.   obj.numberofpoints:=14;
  279.   obj.degre.x:=0;
  280.   obj.degre.y:=0;
  281.   obj.degre.z:=0;
  282.   obj.degreinc.x:=1;
  283.   obj.degreinc.y:=1;
  284.   obj.degreinc.z:=1;
  285.  
  286.  
  287.   obj.orginalcordinates[1].x:=0;
  288.   obj.orginalcordinates[1].y:=30;
  289.   obj.orginalcordinates[1].z:=0;
  290.  
  291.   obj.orginalcordinates[2].x:=-20;
  292.   obj.orginalcordinates[2].y:=20;
  293.   obj.orginalcordinates[2].z:=20;
  294.  
  295.   obj.orginalcordinates[3].x:=20;
  296.   obj.orginalcordinates[3].y:=20;
  297.   obj.orginalcordinates[3].z:=20;
  298.  
  299.   obj.orginalcordinates[4].x:=-30;
  300.   obj.orginalcordinates[4].y:=0;
  301.   obj.orginalcordinates[4].z:=0;
  302.  
  303.   obj.orginalcordinates[5].x:=0;
  304.   obj.orginalcordinates[5].y:=0;
  305.   obj.orginalcordinates[5].z:=30;
  306.  
  307.   obj.orginalcordinates[6].x:=30;
  308.   obj.orginalcordinates[6].y:=0;
  309.   obj.orginalcordinates[6].z:=0;
  310.  
  311.   obj.orginalcordinates[7].x:=-20;
  312.   obj.orginalcordinates[7].y:=-20;
  313.   obj.orginalcordinates[7].z:=20;
  314.  
  315.   obj.orginalcordinates[8].x:=20;
  316.   obj.orginalcordinates[8].y:=-20;
  317.   obj.orginalcordinates[8].z:=20;
  318.  
  319.   obj.orginalcordinates[9].x:=0;
  320.   obj.orginalcordinates[9].y:=-30;
  321.   obj.orginalcordinates[9].z:=0;
  322.  
  323.   obj.orginalcordinates[10].x:=-20;
  324.   obj.orginalcordinates[10].y:=20;
  325.   obj.orginalcordinates[10].z:=-20;
  326.  
  327.   obj.orginalcordinates[11].x:=20;
  328.   obj.orginalcordinates[11].y:=20;
  329.   obj.orginalcordinates[11].z:=-20;
  330.  
  331.   obj.orginalcordinates[12].x:=0;
  332.   obj.orginalcordinates[12].y:=0;
  333.   obj.orginalcordinates[12].z:=-30;
  334.  
  335.   obj.orginalcordinates[13].x:=-20;
  336.   obj.orginalcordinates[13].y:=-20;
  337.   obj.orginalcordinates[13].z:=-20;
  338.  
  339.   obj.orginalcordinates[14].x:=20;
  340.   obj.orginalcordinates[14].y:=-20;
  341.   obj.orginalcordinates[14].z:=-20;
  342. END;
  343.  
  344.  
  345.  
  346. Procedure semitriangle;
  347.  
  348. BEGIN
  349.   obj.numberofpoints:=8;
  350.   obj.degre.x:=0;
  351.   obj.degre.y:=0;
  352.   obj.degre.z:=0;
  353.   obj.degreinc.x:=1;
  354.   obj.degreinc.y:=1;
  355.   obj.degreinc.z:=1;
  356.  
  357.  
  358.   obj.orginalcordinates[1].x:=-2;
  359.   obj.orginalcordinates[1].y:=-33;
  360.   obj.orginalcordinates[1].z:=2;
  361.  
  362.   obj.orginalcordinates[2].x:=-33;
  363.   obj.orginalcordinates[2].y:=33;
  364.   obj.orginalcordinates[2].z:=33;
  365.  
  366.   obj.orginalcordinates[3].x:=33;
  367.   obj.orginalcordinates[3].y:=33;
  368.   obj.orginalcordinates[3].z:=33;
  369.  
  370.   obj.orginalcordinates[4].x:=2;
  371.   obj.orginalcordinates[4].y:=-33;
  372.   obj.orginalcordinates[4].z:=2;
  373.  
  374.   obj.orginalcordinates[5].x:=-2;
  375.   obj.orginalcordinates[5].y:=-33;
  376.   obj.orginalcordinates[5].z:=-2;
  377.  
  378.   obj.orginalcordinates[6].x:=-33;
  379.   obj.orginalcordinates[6].y:=33;
  380.   obj.orginalcordinates[6].z:=-33;
  381.  
  382.   obj.orginalcordinates[7].x:=33;
  383.   obj.orginalcordinates[7].y:=33;
  384.   obj.orginalcordinates[7].z:=-33;
  385.  
  386.   obj.orginalcordinates[8].x:=2;
  387.   obj.orginalcordinates[8].y:=-33;
  388.   obj.orginalcordinates[8].z:=-2;
  389.  
  390. END;
  391.  
  392. Procedure rektangle1;
  393.  
  394. BEGIN
  395.   obj.numberofpoints:=8;
  396.   obj.degre.x:=0;
  397.   obj.degre.y:=0;
  398.   obj.degre.z:=0;
  399.   obj.degreinc.x:=1;
  400.   obj.degreinc.y:=1;
  401.   obj.degreinc.z:=1;
  402.  
  403.  
  404.  
  405.   obj.orginalcordinates[1].x:=-5;
  406.   obj.orginalcordinates[1].y:=-5;
  407.   obj.orginalcordinates[1].z:=30;
  408.  
  409.   obj.orginalcordinates[2].x:=-5;
  410.   obj.orginalcordinates[2].y:=5;
  411.   obj.orginalcordinates[2].z:=30;
  412.  
  413.   obj.orginalcordinates[3].x:=5;
  414.   obj.orginalcordinates[3].y:=5;
  415.   obj.orginalcordinates[3].z:=30;
  416.  
  417.   obj.orginalcordinates[4].x:=5;
  418.   obj.orginalcordinates[4].y:=-5;
  419.   obj.orginalcordinates[4].z:=30;
  420.  
  421.   obj.orginalcordinates[5].x:=-5;
  422.   obj.orginalcordinates[5].y:=-5;
  423.   obj.orginalcordinates[5].z:=-30;
  424.  
  425.   obj.orginalcordinates[6].x:=-5;
  426.   obj.orginalcordinates[6].y:=5;
  427.   obj.orginalcordinates[6].z:=-30;
  428.  
  429.   obj.orginalcordinates[7].x:=5;
  430.   obj.orginalcordinates[7].y:=5;
  431.   obj.orginalcordinates[7].z:=-30;
  432.  
  433.   obj.orginalcordinates[8].x:=5;
  434.   obj.orginalcordinates[8].y:=-5;
  435.   obj.orginalcordinates[8].z:=-30;
  436.  
  437.  
  438. END;
  439.  
  440. Procedure rektangle2;
  441.  
  442. BEGIN
  443.   obj.numberofpoints:=8;
  444.   obj.degre.x:=0;
  445.   obj.degre.y:=0;
  446.   obj.degre.z:=0;
  447.   obj.degreinc.x:=1;
  448.   obj.degreinc.y:=1;
  449.   obj.degreinc.z:=1;
  450.  
  451.  
  452.  
  453.   obj.orginalcordinates[1].x:=-30;
  454.   obj.orginalcordinates[1].y:=-5;
  455.   obj.orginalcordinates[1].z:=30;
  456.  
  457.   obj.orginalcordinates[2].x:=-30;
  458.   obj.orginalcordinates[2].y:=5;
  459.   obj.orginalcordinates[2].z:=30;
  460.  
  461.   obj.orginalcordinates[3].x:=30;
  462.   obj.orginalcordinates[3].y:=5;
  463.   obj.orginalcordinates[3].z:=30;
  464.  
  465.   obj.orginalcordinates[4].x:=30;
  466.   obj.orginalcordinates[4].y:=-5;
  467.   obj.orginalcordinates[4].z:=30;
  468.  
  469.   obj.orginalcordinates[5].x:=-30;
  470.   obj.orginalcordinates[5].y:=-5;
  471.   obj.orginalcordinates[5].z:=-30;
  472.  
  473.   obj.orginalcordinates[6].x:=-30;
  474.   obj.orginalcordinates[6].y:=5;
  475.   obj.orginalcordinates[6].z:=-30;
  476.  
  477.   obj.orginalcordinates[7].x:=30;
  478.   obj.orginalcordinates[7].y:=5;
  479.   obj.orginalcordinates[7].z:=-30;
  480.  
  481.   obj.orginalcordinates[8].x:=30;
  482.   obj.orginalcordinates[8].y:=-5;
  483.   obj.orginalcordinates[8].z:=-30;
  484. end;
  485.  
  486. procedure cube;
  487.  
  488. begin
  489.   obj.numberofpoints:=8;
  490.   obj.degre.x:=0;
  491.   obj.degre.y:=0;
  492.   obj.degre.z:=0;
  493.   obj.degreinc.x:=1;
  494.   obj.degreinc.y:=1;
  495.   obj.degreinc.z:=1;
  496.  
  497.   obj.orginalcordinates[1].x:=-20;
  498.   obj.orginalcordinates[1].y:=-20;
  499.   obj.orginalcordinates[1].z:=20;
  500.  
  501.   obj.orginalcordinates[2].x:=-20;
  502.   obj.orginalcordinates[2].y:=20;
  503.   obj.orginalcordinates[2].z:=20;
  504.  
  505.   obj.orginalcordinates[3].x:=20;
  506.   obj.orginalcordinates[3].y:=20;
  507.   obj.orginalcordinates[3].z:=20;
  508.  
  509.   obj.orginalcordinates[4].x:=20;
  510.   obj.orginalcordinates[4].y:=-20;
  511.   obj.orginalcordinates[4].z:=20;
  512.  
  513.   obj.orginalcordinates[5].x:=-20;
  514.   obj.orginalcordinates[5].y:=-20;
  515.   obj.orginalcordinates[5].z:=-20;
  516.  
  517.   obj.orginalcordinates[6].x:=-20;
  518.   obj.orginalcordinates[6].y:=20;
  519.   obj.orginalcordinates[6].z:=-20;
  520.  
  521.   obj.orginalcordinates[7].x:=20;
  522.   obj.orginalcordinates[7].y:=20;
  523.   obj.orginalcordinates[7].z:=-20;
  524.  
  525.   obj.orginalcordinates[8].x:=20;
  526.   obj.orginalcordinates[8].y:=-20;
  527.   obj.orginalcordinates[8].z:=-20;
  528. end;
  529.  
  530. Procedure XROUT;
  531.  
  532. Var i: INTEGER;
  533.  
  534. Begin
  535.   for i:= 1 to obj.numberofpoints do begin
  536.      { round off because floting point calulation sucks, and you relly
  537.      doesn't lose very mush in accuracy}
  538.     obj.rotatedcordinates[i].x := round(obj.objpos.x+obj.orginalcordinates[i].x);
  539.     obj.rotatedcordinates[i].y := round(obj.objpos.y+obj.orginalcordinates[i].y*cosa[obj.degre.x]-obj.orginalcordinates[i].z*
  540.   sina[obj.degre.x]);
  541.     obj.rotatedcordinates[i].z := round(obj.objpos.z+obj.orginalcordinates[i].y*sina[obj.degre.x]+obj.orginalcordinates[i].z*
  542.     cosa[obj.degre.x]);
  543.   End;
  544. End;
  545.  
  546. Procedure YROUT;
  547.  
  548. Var i: INTEGER;
  549.  
  550. Begin
  551.   for i:= 1 to obj.numberofpoints do begin
  552.     obj.rotatedcordinates[i].x := round(obj.objpos.x+obj.orginalcordinates[i].x*cosa[obj.degre.y]+obj.orginalcordinates[i].z
  553.     *sina[obj.degre.y]);
  554.     obj.rotatedcordinates[i].y := round(obj.objpos.y+obj.orginalcordinates[i].y);
  555.     obj.rotatedcordinates[i].z := round(obj.objpos.z-obj.orginalcordinates[i].x*sina[obj.degre.y]+obj.orginalcordinates[i].z
  556.     *cosa[obj.degre.y]);
  557.   End;
  558. End;
  559.  
  560. Procedure ZROUT;
  561.  
  562. Var i : INTEGER;
  563.  
  564. Begin
  565.   for i:= 1 to obj.numberofpoints do begin
  566.     obj.rotatedcordinates[i].x :=round( obj.objpos.x+obj.orginalcordinates[i].x*cosa[obj.degre.z]-obj.orginalcordinates[i].y
  567.     *sina[obj.degre.z]);
  568.     obj.rotatedcordinates[i].y :=round( obj.objpos.y+obj.orginalcordinates[i].x*sina[obj.degre.z]+obj.orginalcordinates[i].y
  569.     *cosa[obj.degre.z]);
  570.     obj.rotatedcordinates[i].z :=round( obj.objpos.z+obj.orginalcordinates[i].z);
  571.   end;
  572. end;
  573.  
  574. Procedure ZXYROUT;
  575.  
  576. Var a,b,c,d,e,f,g,h,j : REAL;
  577.     i : INTEGER;
  578.  
  579.  
  580. Begin
  581.   a:=cosa[obj.degre.y]*cosa[obj.degre.z];
  582.   b:=cosa[obj.degre.y]*sina[obj.degre.z];
  583.   c:=-sina[obj.degre.y];
  584.   d:=sina[obj.degre.x]*sina[obj.degre.y]*cosa[obj.degre.z]-cosa[obj.degre.x]*sina[obj.degre.z];
  585.   e:=sina[obj.degre.x]*sina[obj.degre.y]*sina[obj.degre.z]+cosa[obj.degre.x]*cosa[obj.degre.z];
  586.   f:=sina[obj.degre.x]*cosa[obj.degre.y];
  587.   g:=cosa[obj.degre.x]*sina[obj.degre.y]*cosa[obj.degre.z]+sina[obj.degre.x]*sina[obj.degre.z];
  588.   h:=cosa[obj.degre.x]*sina[obj.degre.y]*sina[obj.degre.z]-sina[obj.degre.x]*cosa[obj.degre.z];
  589.   j:=cosa[obj.degre.x]*cosa[obj.degre.y];
  590.   for i:= 1 to obj.numberofpoints do begin
  591.     obj.rotatedcordinates[i].x :=round( obj.objpos.x+obj.orginalcordinates[i].x*a+obj.orginalcordinates[i].y*b
  592.     +obj.orginalcordinates[i].z*c);
  593.     obj.rotatedcordinates[i].y :=round( obj.objpos.y+obj.orginalcordinates[i].x*d+obj.orginalcordinates[i].y*e
  594.     +obj.orginalcordinates[i].z*f);
  595.     obj.rotatedcordinates[i].z :=round( obj.objpos.z+obj.orginalcordinates[i].x*g+obj.orginalcordinates[i].y*h
  596.     +obj.orginalcordinates[i].z*j);
  597.   end;
  598. end;
  599.  
  600. procedure  uppgradeobject;
  601.  
  602. begin
  603.   inc(obj.degre.x,obj.degreinc.x);
  604.   inc(obj.degre.y,obj.degreinc.y);
  605.   inc(obj.degre.z,obj.degreinc.z);
  606.   if obj.degre.x<0 then inc(obj.degre.x,360);
  607.   if obj.degre.x>360 then dec(obj.degre.x,360);
  608.   if obj.degre.y<0 then inc(obj.degre.y,360);
  609.   if obj.degre.y>360 then dec(obj.degre.y,360);
  610.   if obj.degre.z<0 then inc(obj.degre.z,360);
  611.   if obj.degre.z>360 then dec(obj.degre.z,360);
  612. end;
  613.  
  614. Procedure rotateobjects;
  615.  
  616. begin
  617.   zxyrout;
  618. end;
  619.  
  620. procedure perspective;
  621.  
  622. var i : INTEGER;
  623.  
  624. begin
  625.   for i:= 1 to obj.numberofpoints do begin
  626.     obj.screencordinates[i].x:=320+round(longint(obj.rotatedcordinates[i].x)*500/obj.rotatedcordinates[i].z);
  627.     obj.screencordinates[i].y:=175+round(longint(obj.rotatedcordinates[i].y)*500/obj.rotatedcordinates[i].z);
  628.   end;
  629. end;
  630.  
  631. procedure putdots;
  632.  
  633. var i : INTEGER;
  634.  
  635. begin
  636.   setvisualpage(page);
  637.   page:=page xor 3;
  638.   setactivepage(page);
  639.   clearviewport;
  640.   for i:=1 to obj.numberofpoints do begin
  641.      putpixel(obj.screencordinates[i].x,obj.screencordinates[i].y,15);
  642.   end;
  643. end;
  644.  
  645. procedure init;
  646.  
  647. var gd,gm : INTEGER;
  648.     i : INTEGER;
  649.  
  650. begin
  651.   gd:=vga;
  652.   gm:=vgamed;          { graphics mode 640*350 pixels }
  653.   initgraph(gd,gm,'c:\bp\bgi'{your bgi directory});
  654.   for i:=0 to 360 do begin
  655.     sina[i]:=sin(i*pi/180{*/180 converts it to radians which the computer
  656.      calculed in don't think more about this});
  657.     cosa[i]:=cos(i*pi/180);
  658.   end;
  659.   page:=2;
  660.   obj.objpos.x:=0;
  661.   obj.objpos.y:=0;
  662.   obj.objpos.z:=150;
  663.   object3;
  664. end;
  665.  
  666.  
  667. procedure Close;
  668.  
  669. begin
  670.   closegraph;
  671. end;
  672.  
  673. begin
  674.  init;
  675.  repeat
  676.    uppgradeobject;
  677.    rotateobjects;
  678.    perspective;
  679.    putdots;
  680.  until keypressed;
  681.  close;
  682. end.